/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.dao;

import com.interfaces.IReserva;
import com.modelo.Inmueble;
import com.modelo.Puntaje;
import com.modelo.Reserva;
import com.modelo.Usuario;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

/**
 *
 * @author Seysame
 */
public class ReservaDAO extends HibernateDaoSupport implements IReserva {

    //by Alejandra
    @Override
    public List<Reserva> consultarReservasPorInmueble(Inmueble inmueble) {

        Query query = this.getSession().createQuery("from Reserva where id_inmueble = :inmueble");
        query.setParameter("inmueble", inmueble.getIdInmueble());
        List<Reserva> listado = query.list();
        return listado;
    }

    public List<Reserva> consultarReservasPorFecha(Inmueble inmueble, Date inicio, Date fin) {
        //pendiente meter las fechas en la consulta
        Query query = this.getSession().createQuery("from Reserva where id_inmueble = :inmueble");
        query.setParameter("inmueble", inmueble.getIdInmueble());
        List<Reserva> listado = query.list();

        List<Reserva> reservas = new ArrayList<Reserva>();
        for (Reserva x : listado) {
            if (x.getFechaLlegada().compareTo(inicio) >= 0 && x.getFechaLlegada().compareTo(fin) <= 0) {
                reservas.add(x);
            }
        }
        return reservas;
    }

    //fin
    @Override
    public List<Reserva> listarReservas() {
        return this.getHibernateTemplate().find("from Reserva");
    }

    @Override
    public Reserva buscarReserva(Reserva reserva) {
        Query query = this.getSession().createQuery("from Reserva where id_reserva = :id ");
        query.setParameter("id", reserva.getIdReserva());
        List<Reserva> listado = query.list();
        if (listado.isEmpty()) {
            return null;
        } else {
            return listado.get(0);
        }
    }

    @Override
    public Reserva registrarReserva(Reserva reserva) {
        this.getHibernateTemplate().saveOrUpdate(reserva);
        return reserva;
    }

    @Override
    public Reserva modificarReserva(Reserva reserva) {
        this.getHibernateTemplate().saveOrUpdate(reserva);
        return reserva;
    }

    @Override
    public List<Reserva> listarReservasPorInmueble(Inmueble inmueble) {
        Query query = this.getSession().createQuery("from Reserva where id_inmueble = :id ");
        query.setParameter("id", inmueble.getIdInmueble());
        List<Reserva> listado = query.list();
        return listado;

    }

    @Override
    public List<Reserva> listarReservasPorUsuario(Usuario cliente) {
        Query query = this.getSession().createQuery("from Reserva where id_usuario = :id ");
        query.setParameter("id", cliente.getIdUsuario());
        List<Reserva> listado = query.list();
        return listado;

    }
}
